
#ifndef TOKZRGENTR_PARSING_IVISITOR_H
#define TOKZRGENTR_PARSING_IVISITOR_H

//#	a ivisitor abstract class for visiting the .tgs parsing syntax tree node
namespace TokzrGentr
{

	using syntax_node = class syntax_node;
	using regex = class regex;
	using decl = class decl;
	using token_identifier = class token_identifier;
	using stmt = class stmt;
	using stmts = class stmts;
	using root = class root;

	using regex_node = class regex_node;
	using char_set_node = class char_set_node;
	using binary_op_node = class binary_op_node;
	using cater_node = class cater_node;
	using alter_node = class alter_node;
	using repeat_node = class repeat_node;

	class syntax_node_ivisitor
	{
	public:
		virtual void visit(regex *node) = 0;
		virtual void visit(decl *node) = 0;
		virtual void visit(token_identifier *node) = 0;
		virtual void visit(stmt *node) = 0;
		virtual void visit(stmts *node) = 0;
		virtual void visit(root *node) = 0;
	};

	class regex_node_ivisitor
	{
	public:
		virtual void visit(char_set_node *node) = 0;
		virtual void visit(cater_node *node) = 0;
		virtual void visit(alter_node *node) = 0;
		virtual void visit(repeat_node *node) = 0;
	};
}

#endif // !TOKZRGENTR_PARSING_SYNTAX_TREE_NODE_IVISITOR_H
